/*
 * @Author: zhouyaohui
 * @Date: 2025-10-16 21:09:22
 * @LastEditTime: 2025-11-14 08:54:58
 * @FilePath: \miyun-warehouse\vue.config.js
 */
const { defineConfig } = require('@vue/cli-service')
const fs = require('fs');
const path = require('path');
const os = require('os');

const SpeedMeasurePlugin = require("speed-measure-webpack-plugin");
const smp = new SpeedMeasurePlugin({
  outputFormat: 'humanVerbose',
  granularLoaderData: true,
  outputTarget: (output) => {
    const timestamp = new Date().toLocaleString();
    console.log(`\n⏱️  ====== 构建性能分析 (${timestamp}) ======`);
    console.log(output);
    console.log('✅ 性能分析完成\n');
    
    // 可选：保存到文件（方便后续查看）
    const logDir = path.resolve(__dirname, 'build-logs');
    if (!fs.existsSync(logDir)) {
      fs.mkdirSync(logDir, { recursive: true });
    }
    const logFile = path.join(logDir, `build-stats-${Date.now()}.log`);
    fs.writeFileSync(logFile, `构建时间: ${timestamp}\n\n${output}`);
    console.log(`📄 详细分析已保存: ${logFile}`);
  }
});

module.exports = defineConfig({
  transpileDependencies: true,
  
  // 注意：configureWebpack和chainWebpack同时使用smp.wrap会有问题
  // 正确的做法是将chainWebpack的配置也包含在smp.wrap中
  configureWebpack: smp.wrap({
    // 这里可以放其他webpack配置
    cache:{
      type:'filesystem',//使用文件系统缓存
      buildDependencies:{
        config:[__filename]
      },
      version:require('./package.json').version
    },

  }),
  
  chainWebpack: (config) => {
    config.module
      .rule('js')
      .test(/\.js$/)  // 修正：应该是test不是text
      .exclude
        .add(/node_modules/) // 排除node_modules
        .end()
      .use('thread-loader')
      .loader('thread-loader')
      .options({
        workers: Math.max(1, os.cpus().length - 1),
        // 工作进程并行数量
        workerParallelJobs: 50,
        // 进程池超时时间
        poolTimeout: 2000,
        // 工作进程存活时间（开发环境保持存活）
        poolTimeout:500,
        // 工作进程输出日志级别
        workerNodeArgs: ['--max-old-space-size=1024']
      })
      .end()
       .use('babel-loader')
      .loader('babel-loader')
      .tap(options => {
        return {
          ...options,
          cacheDirectory: true, // 启用缓存
          cacheCompression: false, // 禁用缓存压缩，加快速度
        }
      })
  }
}) 